﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataTypes;
using Persistencia;

namespace Logica
{
    public static class Fachada
    {
        /// <summary>
        /// Login del sistema.
        /// </summary>
        /// <param name="usuario"></param>
        /// <param name="contraseña"></param>
        public static bool Ingresar(string usuario, string contraseña)
        {
            bool ingreso = false;

            if ((usuario == "admin") && (contraseña == "admin"))
                ingreso = true;

            if ((usuario == "tesorero") && (contraseña == "tesorero"))
                ingreso = true; ;

            if (!ingreso)
            {
                PersistenciaEmpleados perEmpleados = new PersistenciaEmpleados();
                ingreso = perEmpleados.ValidarUsuario(usuario, contraseña);
            }

            return ingreso;
        }

        public static bool AltaBoleta(DataBoleta boleta)
        {
            PersistenciaBoletas pBoleta = new PersistenciaBoletas();
            pBoleta.AltaBoleta(boleta);
            return true;
        }

        //se borra?
        public static bool BajaBoleta(DataBoleta boleta)
        {
            return true;
        }

        public static bool ModificarBoleta(DataBoleta boleta)
        {
            PersistenciaBoletas pBoleta = new PersistenciaBoletas();
            pBoleta.ModificarBoleta(boleta, boleta.Id);
            return true;
        }

        public static bool AltaCoche(DataCoche coche)
        {
            PersistenciaCoches pCoche = new PersistenciaCoches();
            bool insertado = false;
            if (!pCoche.ExisteDataCoche(coche.Matricula))
            {
                pCoche.AltaCoche(coche);
                insertado = true;
            }
            return insertado;
        }

        public static bool BajaCoche(DataCoche coche)
        {
            PersistenciaCoches pCoche = new PersistenciaCoches();
            bool eliminado = false;
            pCoche.EliminarCoche(coche.Matricula);
            if (!pCoche.ExisteDataCoche(coche.Matricula))
            {
                eliminado = true;
            }
            return eliminado;
        }

        public static bool ModificarCoche(DataCoche coche)
        {
            PersistenciaCoches pCoche = new PersistenciaCoches();
            pCoche.ModificarDatosCoche(coche, coche.Matricula);
            return true;
        }

        public static bool AltaProveedor(DataProveedor proveedor)
        {
            PersistenciaProveedores pProveedor = new PersistenciaProveedores();
            bool insertado = false;

            if (!pProveedor.ExisteDataProveedor(proveedor.Rut))
            {
                pProveedor.AltaProveedor(proveedor);
                insertado = true;
            }
            return insertado;
        }

        public static bool BajaProveedor(DataProveedor proveedor)
        {
            PersistenciaProveedores pProveedor = new PersistenciaProveedores();
            bool eliminado = false;

            pProveedor.EliminarProveedor(proveedor.Rut);

            if (!pProveedor.ExisteDataProveedor(proveedor.Rut))
            {
                eliminado = true;
            }
            return eliminado;
        }

        public static bool ModificarProveedor(DataProveedor proveedor)
        {
            PersistenciaProveedores pProveedor = new PersistenciaProveedores();

            pProveedor.ModificarDatosProveedor(proveedor, proveedor.Rut);
            return true;
        }
         
        public static bool AltaEmpleado(DataEmpleado empleado, DataConductor conductor, DataPersonal personal)
        {
            bool resultado = false;
            PersistenciaEmpleados empl = new PersistenciaEmpleados();
            
            if (conductor == null)
            {
                if (!empl.ExisteDataEmpleado(personal.Ci))
                {
                    empl.AltaPersonal(personal);
                    resultado = true;
                }
            }
            else if (personal == null)
            {
                if (!empl.ExisteDataEmpleado(conductor.Ci))
                {
                    empl.AltaConductor(conductor);
                    resultado = true;
                }
            }

            return resultado;
        }

        public static bool ModificarEmpleado(DataEmpleado empleado, DataConductor conductor, DataPersonal personal)
        {
            bool resultado = false;
            PersistenciaEmpleados empl = new PersistenciaEmpleados();

            if (conductor == null)
            {
                empl.ModificarDatosPersonal(personal, personal.Ci);
                resultado = true;
            }
            else if (personal == null)
            {
                empl.ModificarDatosConductor(conductor, conductor.Ci);
                resultado = true;
            }

            return resultado;
        }



        public static bool CambiarEstadoEmpleado(String ci, bool estado)
        {
            PersistenciaEmpleados pEmpl = new PersistenciaEmpleados();

            pEmpl.CambiarEstadoEmpleado(ci, estado);

            return true;
        }

       

        public static bool ModificarContrasenia(string nomUsuario, string contNueva)
        {
            PersistenciaEmpleados persEmpl = new PersistenciaEmpleados();
            persEmpl.ModificarContraseniaEmpleado(nomUsuario, contNueva);
            return true;
        }



        public static bool AltaGasto(DataGasto gasto)
        {
            PersistenciaGastos pGasto = new PersistenciaGastos();
            bool insertado = false;
            if (!pGasto.ExisteDataGasto(gasto.Nombre))
            {
                pGasto.AltaGasto(gasto);
                insertado = true;
            }
            return insertado;
        }

        public static bool ModificarGasto(DataGasto gasto)
        {
            PersistenciaGastos pGastos = new PersistenciaGastos();
            pGastos.ModificarGasto(gasto, gasto.Nombre);
            return true;
        }

        public static bool EliminarGasto(DataGasto gasto)
        {
            PersistenciaGastos pGasto = new PersistenciaGastos();
            bool eliminado = false;
            pGasto.EliminarGasto(gasto.Nombre);
            if (!pGasto.ExisteDataGasto(gasto.Nombre))
            {
                eliminado = true;
            }
            return eliminado;
        }

        public static List<DataConductor> ListarConductores()
        {
            PersistenciaEmpleados pempl = new PersistenciaEmpleados();
            return pempl.ListarConductores();
        }

        public static List<DataPersonal> ListarPersonal()
        {
            PersistenciaEmpleados pempl = new PersistenciaEmpleados();
            return pempl.ListarPersonales();
        }

        public static List<DataCoche> ListarCoches()
        {
            PersistenciaCoches pCoches = new PersistenciaCoches();
            return pCoches.ListarCoches();
        }

        public static List<DataGasto> ListarGastos()
        {
            PersistenciaGastos pGastos = new PersistenciaGastos();
            return pGastos.ListarGastos();
        }

        public static void InicializarGastoBoleta()
        {
            DataBoleta dBoleta = new DataBoleta();
            dBoleta.InicializarListaGastos();
        }

        public static void AgregarGastoBoleta(DataGasto gasto)
        {
            DataBoleta dBoleta = new DataBoleta();
            dBoleta.AgregarGasto(gasto);
        }

        public static void EliminarGastoBoleta(DataGasto gasto)
        {
            DataBoleta dBoleta = new DataBoleta();
            dBoleta.EliminarGasto(gasto);
        }

        public static List<DataGasto> ListarGastosBoleta(int idBoleta)
        {
            PersistenciaBoletas pGastos = new PersistenciaBoletas();
            return pGastos.ListarGastos(idBoleta);
        }

        public static List<DataBoleta> ListarBoletas()
        {
            PersistenciaBoletas pBoletas = new PersistenciaBoletas();
            return pBoletas.ListarBoletas();
        }

        public static List<DataBoleta> ListarBoletasDesdeHasta(DateTime desde, DateTime hasta)
        {
            PersistenciaBoletas pBoletas = new PersistenciaBoletas();
            return pBoletas.ListarBoletasDesdeHasta(desde, hasta);
        }

        public static void ModificarEstadoBoleta(int idBoleta, string estado)
        {
            PersistenciaBoletas pBoletas = new PersistenciaBoletas();
            pBoletas.ModificarEstadoBoleta(idBoleta, estado);
        }

        public static List<DataProveedor> ListarProveedores()
        {
            PersistenciaProveedores pProveedores = new PersistenciaProveedores();
            return pProveedores.ListarProveedores();
        }

        public static string ObtenerRolEmpleado(string usuario){
            PersistenciaEmpleados pEmpleados = new PersistenciaEmpleados();
            return pEmpleados.ObtenerRolEmpleado(usuario);
        }
    }        
}